const mongoose=require('mongoose');
const bcrypt =require('bcrypt')
const Joi=require('joi');

// 1.规则制定
const userSchema=new mongoose.Schema({
    username:{
        type:String,
        require:true,
        minlength:2,
        maxength:20
    },
    email:{
        type:String,
        unique:true,
        required:true
    },
    password:{
        type:String,
        required:true
    },
    role:{
        // admin:管理员，normal：普通用户
        type:String,
        required:true
    },
    // 0是启用状态，1是禁用
    state:{
        type:Number,
        default:0
    }
})

// 2.创建集合
const User=mongoose.model('User',userSchema);

// 3.1异步brypt加密
async function createUser(){
    const salt =await bcrypt.genSalt(10);
    const pass=await bcrypt.hash('123',salt);
    const user=await User.create({
        username:'mango',
            email:'789@qq.com',
            password:pass,
            role:'admin',
            state:0
    })
}
// createUser();

// 验证用户信息(validate:证实)
const ValidateUser=(user)=>{
    const schema={
        username:Joi.string().min(2).max(12).required().error(new Error('用户名不符合规范')),
        email:Joi.string().email().required().error(new Error('邮箱格式不对')),
        password:Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式不对')),
        role:Joi.string().valid('normal','admin').required().error(new Error('角色格式不对')),
        state:Joi.string().valid('0','1').required().error(new Error('状态格式不对')),
    };
    // 匹配验证
    return  Joi.validate(user,schema);
}

// 3.创建user：
// User.create({
//     username:'mango',
//     email:'456@qq.com',
//     password:'123',
//     role:'admin',
//     state:0
// }).then(()=>{console.log('用户创建成功')})
// .catch(()=>{console.log('用户创建失败')})

// 4.导出
module.exports={
    User,ValidateUser
}

